﻿//
// Created by Administrator on 2025/7/8.
//
// 功能： 用于线程间通信，比如等待某条件满足。
#include <iostream>                // 用于标准输入输出
#include <thread>                 // 用于使用 std::thread 创建线程
#include <mutex>                  // 用于互斥锁 std::mutex
#include <condition_variable>     // 用于条件变量 std::condition_variable
std::mutex mtx;                   // 定义互斥锁，用于保护共享数据
std::condition_variable cv;      // 条件变量，用于线程同步（等待/通知机制）
bool ready = false;              // 标志位，表示是否可以执行工作线程
// 工作线程函数
void worker() {
    std::unique_lock<std::mutex> lock(mtx);  // 获取互斥锁（可释放再重新加锁的锁）
    // 等待条件变量，当 lambda 返回 true 时结束等待
    // 如果 ready 为 false，就阻塞在此，直到被通知并且 ready 为 true
    cv.wait(lock, []{ return ready; });
    // 一旦唤醒并且 ready == true，就执行以下语句
    std::cout << "Worker thread activated!" << std::endl;
}
int main() {
    std::thread t(worker);  // 启动工作线程 t，执行 worker 函数
    std::this_thread::sleep_for(std::chrono::seconds(1));  // 主线程睡眠1秒，模拟准备过程
    {
        std::lock_guard<std::mutex> lock(mtx);  // 加锁（短作用域锁），防止竞争
        ready = true;                           // 修改共享变量为 true，表示可以继续执行
    }  // 作用域结束自动释放锁
    cv.notify_one();  // 通知一个等待中的线程（即 worker）检查条件
    t.join();         // 等待线程 t 执行完毕（主线程阻塞直到 t 完成）
    return 0;         // 程序结束
}

/*
 * 当然可以！下面是你提供的使用 `std::condition_variable` 的 C++ 多线程同步代码的**逐行中文注释版**：

---

```cpp
#include <iostream>                // 用于标准输入输出
#include <thread>                 // 用于使用 std::thread 创建线程
#include <mutex>                  // 用于互斥锁 std::mutex
#include <condition_variable>     // 用于条件变量 std::condition_variable

std::mutex mtx;                   // 定义互斥锁，用于保护共享数据
std::condition_variable cv;      // 条件变量，用于线程同步（等待/通知机制）
bool ready = false;              // 标志位，表示是否可以执行工作线程

// 工作线程函数
void worker() {
    std::unique_lock<std::mutex> lock(mtx);  // 获取互斥锁（可释放再重新加锁的锁）

    // 等待条件变量，当 lambda 返回 true 时结束等待
    // 如果 ready 为 false，就阻塞在此，直到被通知并且 ready 为 true
    cv.wait(lock, []{ return ready; });

    // 一旦唤醒并且 ready == true，就执行以下语句
    std::cout << "Worker thread activated!" << std::endl;
}

int main() {
    std::thread t(worker);  // 启动工作线程 t，执行 worker 函数

    std::this_thread::sleep_for(std::chrono::seconds(1));  // 主线程睡眠1秒，模拟准备过程

    {
        std::lock_guard<std::mutex> lock(mtx);  // 加锁（短作用域锁），防止竞争
        ready = true;                           // 修改共享变量为 true，表示可以继续执行
    }  // 作用域结束自动释放锁

    cv.notify_one();  // 通知一个等待中的线程（即 worker）检查条件

    t.join();         // 等待线程 t 执行完毕（主线程阻塞直到 t 完成）
    return 0;         // 程序结束
}
```

---

### ✅ 总结说明：

* `condition_variable` 和 `unique_lock` 搭配使用，实现线程间的**等待-通知机制**。
* 主线程中：

  * 设置 `ready = true`，再通过 `cv.notify_one()` 通知子线程。
* 子线程中：

  * 使用 `cv.wait()` 阻塞，直到 `ready == true` 并收到通知后被唤醒。
* 这种机制非常适合用在**生产者-消费者模型、任务调度系统、线程依赖等待**等场景。

如果你需要一个更复杂的多线程通信或多个线程等待/通知的例子，我也可以继续帮你扩展。

 *
 * */